package com.xudm.cdg.utils;

import cn.hutool.core.collection.CollUtil;
import com.xudm.cdg.entity.cosmic.SequenceDescription;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 时序图描述工具类
 *
 * @Author xudm
 */
public class SequenceDescriptionUtil {
    public static void main(String[] args) {
        // 时序图描述
        String sequenceDescription = "时序图描述";
        System.out.println(sequenceDescription);
    }

    /**
     * 获取时序图描述
     *
     * @param dataList 数据列表
     * @return 时序图描述
     */
    public static String getSequenceDescription(List<SequenceDescription> dataList) {
        if (CollUtil.isEmpty(dataList)) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < dataList.size(); i++) {
            SequenceDescription description = dataList.get(i);
            sb.append("步骤" + (i + 1)).append("、");
            sb.append(description.getMessage()).append("：");
            sb.append(description.getFrom()).append(description.getType() == 1 ? "访问" : "发送");
            sb.append(description.getDataGroup()).append("给").append(description.getTo());
            sb.append("（数据组：").append(description.getDataGroup()).append("）");
            //添加换行
            sb.append("\n");
        }
        return sb.toString();
    }

    /**
     * 提取发起者
     *
     * @param functionalUser 功能用户
     * @return 发起者
     */
    public static String extractInitiator(String functionalUser) {
        // 定义正则表达式模式
        String initiatorPattern = "发起者：([^接收者]+)";
        return extractValue(functionalUser, initiatorPattern);
    }

    /**
     * 提取接收者
     *
     * @param functionalUser 功能用户
     * @return 接收者
     */
    public static String extractReceiver(String functionalUser) {
        // 定义正则表达式模式
        String receiverPattern = "接收者：(.+)";
        return extractValue(functionalUser, receiverPattern);
    }

    /**
     * 提取值
     *
     * @param input   输入字符串
     * @param pattern 正则表达式模式
     * @return 值
     */
    private static String extractValue(String input, String pattern) {
        // 编译正则表达式
        Pattern compiledPattern = Pattern.compile(pattern);
        // 创建匹配器
        Matcher matcher = compiledPattern.matcher(input);

        // 查找匹配的内容
        if (matcher.find()) {
            return matcher.group(1);
        } else {
            return "";
        }
    }

}
